package org.study.javafx.study01.tree.code;

import cn.hutool.core.io.resource.ClassPathResource;
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import lombok.extern.slf4j.Slf4j;
import org.study.javafx.study01.AppStarter;
import org.study.javafx.study01.config.AppConfig;

/**
 * 参考 https://blog.csdn.net/zy103118/article/details/122573538
 *
 * @author doveylovey
 * @version v1.0.0
 * @email 1135782208@qq.com
 * @date 2024年08月18日
 */
@Slf4j
public class TreeCode1_1 extends Application {
    /**
     * 直接运行此方法会报如下错误：
     * 错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
     * 请运行 {@link AppStarter#main(String[])}
     */
    public static void main(String[] args) {
        AppConfig.init();
        launch(args);
    }

    /**
     * 定义一个图片类型节点对象
     */
    private final Node rootIcon = new ImageView(new Image(new ClassPathResource("icon/icon.png").getPath()));

    @Override
    public void init() throws Exception {
        super.init();
    }

    @Override
    public void start(Stage stage) throws Exception {
        // 舞台标题
        stage.setTitle("TreeView例子");
        // 定义树结构模型中的一个选项(跟选项节点挂载前文定义的图形节点)
        TreeItem<String> rootItem = new TreeItem<>("Inbox", rootIcon);
        // 设置节点选择项是否可以展开，本例中为可展开
        rootItem.setExpanded(true);
        for (int i = 1; i < 6; i++) {
            TreeItem<String> item = new TreeItem<>("节点选项" + i);
            // 根节点中添加其他节点
            rootItem.getChildren().add(item);
        }
        // 创建一个树形视图组件
        TreeView<String> tree = new TreeView<>(rootItem);
        // 创建一个堆栈布局面板
        StackPane root = new StackPane();
        // 堆栈布局面板上添加树形视图组件
        root.getChildren().add(tree);
        // 舞台挂载场景
        stage.setScene(new Scene(root, 500, 300));
        // 舞台展现
        stage.show();
    }

    @Override
    public void stop() throws Exception {
        super.stop();
    }
}
